/*文件名：newHugeNum.h
 *作用：巨大数程序头文件，声明巨大数存储数据结构、函数及各个函数的作用注释。
 *author：Conph_刘康富
 */

#ifndef _MEC_HUGE_NUMBER_H_
#define _MEC_HUGE_NUMBER_H_

#define PLUS	 					 	43
#define MINUS			 				45
#define DOT								46

#define BIGGER							1
#define SMALLER							2
#define EQUAL							3

#define TRUE							1
#define FALSE							0

#define THE_DECIMAL_BIT					30

/*
 *巨大数存储结构体
 *sign 符号标志
 *hugeNumAddress 巨大数存储的首地址
 *power 小数点所在的位置（权重）
 *count 巨大数所占用的万进制位数
 */
typedef struct HUGE_NUM{
	unsigned char sign;
	int *hugeNumAddress;
	int power;
	int count;
}HUGE_NUM;

/*
 *函数名：showTheHugeNum
 *参数：HUGE_NUM* hugeNum
 *返回值：void
 *作用：根据传入的巨大数的地址、符号、权重、位数，在屏幕上显示出其值。
 */
void showTheHugeNum(HUGE_NUM* hugeNum);
/*
 *函数名：destoryHugeNum
 *参数：HUGE_NUM** hugeNum
 *返回值：void
 *作用：
 *
 */
void destoryHugeNum(HUGE_NUM** hugeNum);
/*
 *函数名：scanThehugeNum
 *参数：FILE *fp, HUGE_NUM* hugeNum
 *返回值：void
 *作用：将指定文件指针所指向的文件进行扫描，转化表示为巨大数结构体并填入参数2。
 *
 */
void scanThehugeNum(FILE *fp, HUGE_NUM* hugeNum);
/*
 *函数名：getTheIntegerNum
 *参数：FILE* fp, HUGE_NUM* hugeNum, int numberSize
 *返回值：void
 *作用：将整数部分扫描、转化为值再根据顺序存储
 *
 */
void getTheIntegerNum(FILE* fp, HUGE_NUM* hugeNum, int numberSize);
/*
 *函数名：findTheValueByIndex
 *参数：HUGE_NUM* hugeNum, int index
 *返回值：int
 *作用：根据传入的index值定位到巨大数的某一个万进制位，将其值返回
 *
 */
int findTheValueByIndex(HUGE_NUM* hugeNum, int index);
/*
 *函数名：addOneCarry
 *参数：HUGE_NUM* hugeNum
 *返回值：void
 *作用：给巨大数加一，并处理进位。
 *
 */
void addOneCarry(HUGE_NUM* hugeNum);
/*
 *函数名：getTheMSourceValue
 *参数：HUGE_NUM* hugeNum
 *返回值：void
 *作用：将此巨大数内容转换为微易码补码形式表示。（末位未加进位值）
 *
 */
void getTheMSourceValue(HUGE_NUM* hugeNum);
/*
 *函数名：findTheComplementByIndex
 *参数：HUGE_NUM* hugeNum, int index
 *返回值：int
 *作用：根据当前巨大数与位下标，计算出此位的补码值。
 *
 */
int findTheComplementByIndex(HUGE_NUM* hugeNum, int index);
/*
 *函数名：addTwohugeNum
 *参数：HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2
 *返回值：HUGE_NUM*
 *作用：进行巨大数1与巨大数2的相加操作，结果巨大数作为返回值。
 *
 */
HUGE_NUM* addTwohugeNum(HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：subTwohugeNum
 *参数：HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2
 *返回值：HUGE_NUM*
 *作用：进行巨大数1与巨大数2的相减操作，结果巨大数作为返回值。
 *
 */
HUGE_NUM* subTwohugeNum(HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：multiplyTwoHugeNum
 *参数：HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2
 *返回值：HUGE_NUM*
 *作用：进行巨大数1与巨大数2的相乘操作，结果巨大数作为返回值。
 *
 */
HUGE_NUM* multiplyTwoHugeNum(HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：cutDownZeroBeforeHugeNum
 *参数：HUGE_NUM* hugeNum
 *返回值：HUGE_NUM*
 *作用：
 *
 */
HUGE_NUM* cutDownZeroBeforeHugeNum(HUGE_NUM* hugeNum);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
unsigned char hugeNumisZero(HUGE_NUM* hugeNum);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
int isBigger(HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
HUGE_NUM* creatHugeNumByOrders(int i, int orderDiference);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
HUGE_NUM* enlargeHugeNumOneOrder(HUGE_NUM* hugeNum);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
void minusEqualsHugeNum(HUGE_NUM** hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
void plusEqualsHugeNum(HUGE_NUM** hugeNum_1, HUGE_NUM* hugeNum_2);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
HUGE_NUM* copyHugeNum(HUGE_NUM* hugeNum);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
void scientificHugeNum(HUGE_NUM** hugeNum, int* order);
/*
 *函数名：showTheHugeNum
 *参数：
 *返回值：void
 *作用：
 *
 */
HUGE_NUM* divideTwoHugeNum(HUGE_NUM* hugeNum_1, HUGE_NUM* hugeNum_2);

#endif